package sdk.webview.fmc.com.fmcsdk.view;

import android.content.Context;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Movie;
import android.graphics.Paint;
import android.os.SystemClock;
import android.view.View;

/**
 * Created by ydm on 2018/9/8.
 */

public class CustomGifView extends View {
    private Movie mMovie;
    private long mMovieStart;
    private int resId;

    public CustomGifView(Context context, int resId) {
        super(context);
        this.resId = resId;
        setLayerType(View.LAYER_TYPE_SOFTWARE, null);//必须关闭硬件加速
        mMovie = Movie.decodeStream(getResources().openRawResource(resId));//创建Movie对象
    }

    public void onDraw(Canvas canvas) {
        long now = SystemClock.uptimeMillis();//系统当前时刻
        //第一次播放
        if (mMovieStart == 0) mMovieStart = now;//动画开始的时间
        if (mMovie != null) {
            int dur = mMovie.duration();//动画持续的时间，也就是完成一次动画的时间
            if (dur == 0) dur = 1000;
            int relTime = (int) ((now - mMovieStart) % dur);//注意这是取余操作，这才能算出当前这次重复播放的第一帧的时间
            mMovie.setTime(relTime);//设置相对本次播放第一帧时间，根据这个时间来决定显示第几帧
            mMovie.draw(canvas, 0, 0);
            invalidate();
        } else {//如果指定的资源不是gif图片，也就是说是普通的图片，则需要手动绘制此图片
            canvas.drawBitmap(BitmapFactory.decodeResource(getResources(), resId), getMatrix(), new Paint());
        }
    }
}